今天登錄mysql數據庫服務器的時候突然發現服務器時間戳不對,比北京時間快了幾分鐘,我的天。。。隨後檢查了其他的幾台數據庫服務器發現同樣都存在不同的偏差,最小的比北京時間快幾秒,最大的長達8分鐘,感覺整個人都不舒服了。。。服務器時間戳沒有同步會導致什麼問題呢,舉個最簡單的例子你的程序代碼裡面用now()來獲取時間,比如一個訂單,你最終會發現訂單的處理時間竟然比訂單的創建時間來到早!!!
隨後要做的事情就是改服務器時間了,改服務器時間本身是個很簡單的事情,可是要考慮到應用數據在隨時寫入,兩台主從服務器還在實時同步,所以大概列了一個詳細的計劃和步驟,大體思路是:停應用停數據庫(先備後主)改時間啟數據庫(先主後備)啟應用
備忘下:
1 通知系統上下游,以及相關業務,系統某個時間點(一般在凌晨)停止服務
2 關閉服務器入口,比如nginx/F5等,避免新的訂單進入
3 關閉定時任務,避免任務繼續在跑
4 關閉應用
5關閉MHA(MySQL高可用方案)
6 關閉MySQL從庫
a.先查看當前的主從同步狀態show slave status\G;看是否雙yes
b.執行stop slave
c.停止從庫服務mysqladmin shutdown -u用戶名-p密碼
d.查看是否還有mysql的進程ps -ef | grep mysql
d.如果部署了多個實例,那每個實例都要按照以上步驟來操作
7 關閉MySQL主庫
a.停止主庫服務mysqladmin shutdown -u用戶名-p密碼
b. 查看是否還有mysql的進程ps -ef | grep mysql
8 修改數據庫服務器時間
9 啟動MySQL主庫
a.啟動主庫服務mysqladmin start -u用戶名-p密碼
b. 查看mysql的進程ps -ef | grep mysql
10 啟動MySQL從庫
a.啟動從庫服務mysqladmin start -u用戶名-p密碼
b.啟動複製start slave;
c.檢查同步狀態show slave status\G;是否雙yes
d. 查看mysql的進程ps -ef | grep mysql
11 啟動MHA
12 啟動應用
13 啟動定時器
14 啟動外部入口
15 完畢!